简书链接:第一篇objectc和xcode开发工具撸代码初探吐槽
文章字数:668,阅读全文大约需要2分钟

开发工具吐槽

  1. 开发工具似乎没有主动补全的快捷键. 比如输入NSL手动把提示关闭了,没法再让它弹出勒 (发现时按esc得,不知道能不能改…)
  2. 开发工具似乎自动提示选中一个提示智能用触摸板操作,没法用enter,或者空格选中,而 tab在一个的时候可以选中,但是多个的时候无效.

语法吐槽和语法概述

object c是我见过的最蛋疼的语法,但是就难度而言,可能也没法跟某些vb语法相比,我曾经写的vb程序才是最头疼的..
不过面相对象的操作比较怪异.

  1. 和c语言一样,object c也分两套文件,.h .m
  2. -代表的是非静态方法,+代表静态方法
  3. 访问成员方法貌似加self关键词没用
  4. 不能顾名思义,否则入坑,比如@interface实际上是类的修饰符声明
  5. 实现文件盒声明文件都特么要写@end
  6. 基本上对象的操作都得用[]包裹起来,用习惯了就好,我感觉这就是开发工具取出东西的时候逻辑混乱,导致开发了这样操蛋另类得语法. c++用 -> php用=>java c#用. 如 person.eat() 参数则用,区分 而 object c呢访问之间是空格,但是左边和右边用[]包裹,参数也比较奇葩,用:
  7. 没有包名得概念,都是用前缀区分.也就是冲突这种东西自己把控.
  8. object c 的关键词都携带@ 不带的关键词则代表是c的关键字.

和其他语言代码举例

1
2
3
Student *student= [[Student alloc] init];
[student publicObjectSetAgeMethod:10];//参数用冒号
int age= [student publicObjecGetAgetMethod];

java代码

1
2
3
Student student =new Student();
student. publicObjectSetAgeMethod(10);
int age=student. publicObjecGetAgetMethod();

撸代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
```
#import <Foundation/Foundation.h>
@interface Student :NSObject
{

int age;
}

-(int) publicObjecGetAgetMethod;// get
-(void)publicObjectSetAgeMethod:(int)agearg;//set




@end

1
2


#import <Foundation/Foundation.h>
#import “Student.h”
@implementation Student
-(int)publicObjecGetAgetMethod{
return age;
}
-(void)publicObjectSetAgeMethod:(int)argearg{
// self.
age=argearg;
NSLog(@”call set arg arg %d “,argearg);

}

@end

1
操作文件

#import <Foundation/Foundation.h>
#import “Student.h”
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@” arg value %s”,”fff”);//参数字符串不需要加@

// Student *student= [Student alloc];
// student= [student init];

    Student *student= [[Student alloc] init];
    [student publicObjectSetAgeMethod:10];
    int age=        [student publicObjecGetAgetMethod];
    NSLog(@"call age %d ",age);
    

// [student release];//
}
return 0;
}

1
2
3
4
5


### 进阶多参

声明文件

-(int)age;
-(int)no;
-(void)setNoAndAge:(int)agearg novalue:(int)noarg;

1
2
实现文件

-(int)age{
return age;
}
-(int)no{
return no;

}
-(void)setNoAndAge:(int)ageargxxx novalue:(int)noargxxx{

age=ageargxxx;
no=noargxxx;

}

1
2
3


调用
    NSLog(@"call age %d ",age);
    [student setNoAndAge:10 novalue:20120206];
    age=[student age];
    NSLog(@"call age %d  no %d;",age,[student no]);
    
1. 声明和实现的参数名字可以不一样.
2. 第二个参数 冒号前面```:```必须加参数描述加在冒号前面,,调用的时候用来告诉这个东西是啥,如```      [student setNoAndAge:10 novalue:20120206];``` 其中novalue就是描述,有人认为这是object c得优点 那我跟你说吧,其他开发工具能自己根据参数名自动显示参数名,哪有objectc这样必须强制浪费别人时间.,
3. 目前我现在没有办法通过```self.```读取成员变量,也就是说如果参数得名字和成员变量名字一样就翻车了.